/**
 * Description:
 * Class Name:ClassLoaderPropTest
 * Date:2022/4/29 15:07
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第18章_类加载机制与反射._18_2_类加载器._18_2_1_类加载机制;

import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;

public class ClassLoaderPropTest {
    public static void main(String[] args) throws IOException {
        // 获取系统类加载器
        ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
        System.out.println("系统类加载器：" + systemLoader);

        /*
        获取系统类加载器的加载路径——通常由CLASSPATH环境变量指定，
        如果操作系统没有指定CLASSPATH环境变量，则默认以当前路径作为系统类加载器的加载路径
         */
        Enumeration<URL> em1 = systemLoader.getResources("");
        while (em1.hasMoreElements()){
            System.out.println(em1.nextElement());
        }
        // 获取系统类加载器的父类加载器，从而得到扩展类加载器，还记得JVM的类加载器的层次结构吗
        ClassLoader extensionLoader = systemLoader.getParent();
        System.out.println("扩展类加载器：" + extensionLoader);
        System.out.println("扩展类加载器的加载路径：" + System.getProperty("java.ext.dirs"));
        System.out.println("扩展类加载器的parent是：" + extensionLoader.getParent());
    }
}
//系统类加载器：jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
//file:/D:/Java_Practice_Files/All_Projects/use_idea_editor/out/production/use_idea_editor/
//扩展类加载器：jdk.internal.loader.ClassLoaders$PlatformClassLoader@4dd8dc3
//扩展类加载器的加载路径：null
//扩展类加载器的parent是：null